问题描述
搜索过程是从(0,0)出发,按照深度优先的原则,从8个方向中尝试一个可以走的点,直到尝试过所有的方向,走完棋盘上的所有点,得出所有的解。
在n*n的棋盘中,马只能走"日"字。马从位置(0,0)出发,把棋盘的每一格都走一次且只走一次。找出所有路径。 5*5的棋盘上,有304种解。
搜索过程是从(0,0)出发,按照深度优先的原则,从8个方向中尝试一个可以走的点,直到尝试过所有的方向,走完棋盘上的所有点,得出所有的解。
马走日问题可以看成是在层数为n*n的8叉树中,找出所有的解。
#include "stdio"
int N =5;//棋盘大小为5*5
int martic[N][N];//代表棋盘的数组
int count = 0;//走的步数
int solution = 0;//方法数量
int step[8][2] = {
{-1,-2},{-2,-1}, {-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}};//要走的八个方向
int isok(int x,int y)//判断这一步是否符合规则
{
if ((x>=0&&x<N&&y>=0&&y<N&&martic == 0))
{
return true;
}
else
{
return false;
}
}
void display()//如果整个棋盘已经走满,就输出整个棋盘
{
printf("th